package dao;

import model.User;
import utills.DBUtils;
import utills.StringUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;

/**
 * @Author quan
 * @Description TODO
 * @Date 2023/6/30 16:28
 */
public class UserDao {
    /**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return 返回一个user对象
     */
    public User selectByUsername(String username){
        //1、判断username是否为空
        if(StringUtils.isEmpty(username)){
            return null;
        }
        //2、说明username有值，连接数据库，查询用户名为username的用户
        //(1)进行数据库连接操作，定义数据库访问的相关对象
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            //(2)连接数据库
            connection = DBUtils.getConnection();
            //(3)定义sql语句
            String sql = "select id,username,password from user where username = ?";
            //(4)对sql进行预处理
            statement = connection.prepareStatement(sql);
            //(5)设置占位符的值
            statement.setString(1,username);
            //(6)执行sql，获取结果
            resultSet = statement.executeQuery();
            //(7)解析结果集，构造对象
            if(resultSet.next()){
                //创建一个User对象
                User user = new User();
                user.setId(resultSet.getLong(1));
                user.setUsername(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                //返回结果
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //3、释放资源
            DBUtils.close(statement,connection,resultSet);
        }
        //4、说明没有查询到结果，返回null
        return null;
    }

    /**
     * 根据用户Id查询用户信息
     * @param id 用户信息
     * @return 对应的用户记录
     */
    public User selectById(Long id){
        //判断id是否为空
        if(id == null || id <= 0){
            return null;
        }
        //连接数据库获取查询数据
        //(1)初始化数据库对象
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        //(2)获取数据库连接
        try {
            connection = DBUtils.getConnection();
            //(3)定义sql
            String sql = "select id,username,password from user where id = ?";
            //(4)预处理sql
            statement = connection.prepareStatement(sql);
            //(5)设置占位符
            statement.setLong(1,id);
            //(6)获取结果集
            resultSet = statement.executeQuery();
            //(7)获取结果集
            if(resultSet.next()){
                //(8)封装对象：创建一个用户对象并设置参数
                User user = new User();
                user.setId(resultSet.getLong(1));
                user.setUsername(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                //(9)返回结果
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.close(statement,connection,resultSet);
        }
        return null;
    }
}
